home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / VLA_FONT.ZIP / GETPAL.ASM < prev    next >
Assembly Source File  |  1993-09-28  |  7KB  |  259 lines

  1.         dosseg
  2. stacks  segment byte stack 'stack'
  3.         thestak         db      256 dup(0h)
  4. stacks  ends
  5.  
  6. code    segment byte public 'code'
  7.         assume  cs:code, es:code, ds:code, ss:stacks
  8. start:  
  9.  
  10.         mov     ax,es
  11.         mov     ds,ax
  12.         mov     si,128
  13.         lodsb
  14.         xor     cx,cx
  15.         mov     cl,al
  16.         mov     [inputlength],cx
  17.         mov     ax,cs
  18.         mov     es,ax
  19.         mov     di,offset inputstring
  20.         rep     movsb
  21.         
  22.         jmp main
  23.  
  24. ;===- data -===
  25.  
  26.         credits db      13,10,"TGA Palette Grabber",13,10
  27.                 db      "  By Ben Gardner",13,10,"$"
  28.  
  29.         properuse db    "TGA Palette Grabber:",13,10
  30.                 db      " Use: GETPAL Filename ",13,10
  31.                 db      "Directory paths not supported.$",13,10,'$'
  32.  
  33.         inputstring  db 255 dup ('~')
  34.         inputlength  dw 0
  35.  
  36.         filename db     "12345678.tga",0,0,0,0 
  37.  
  38.         ErrorLook dw    offset properuse,offset properuse,offset Nofile
  39.                 dw      offset Nopath,offset Nohandle,OFFSET Noaccess
  40.                 
  41.         
  42.         nofile          db      10,13,"File not found error.$"
  43.         nopath          db      10,13,"Path not found error.$"
  44.         nohandle        db      10,13,"No handles available.$"
  45.         noaccess        db      10,13,"Access to file denied.$"
  46.         errormes        db      10,13,"Program aborted.$"
  47.         diskfull        db      10,13,"Disk full.$"
  48.  
  49.         result          db      10,13,"Program was successful. Cut palette stored in "
  50.         PalName  db     "12345678.pal",0,0,0,'$' 
  51.                        
  52.         
  53.         fileshand       dw      0000h
  54.         filedhand       dw      0000h
  55.  
  56.         bufferit        dw      768 dup (0)
  57.  
  58. ;========- SubRoutines -========
  59. Waitkey proc near
  60. here:
  61.         mov  ah,1
  62.         int  16h                         ; has a key been pressed?
  63.         jz   HERE                        ; no, goto HERE
  64.         mov  ah,0
  65.         int  16h                         ; yes, get the character
  66.         ret
  67. waitkey endp
  68.  
  69. GetCommand proc near
  70.         mov     ax,es
  71.         mov     ds,ax
  72.         mov     si,128
  73.         lodsb
  74.         xor     cx,cx
  75.         mov     cl,al
  76.         mov     [inputlength],cx
  77.         mov     ax,cs
  78.         mov     es,ax
  79.         mov     di,offset inputstring
  80.         mov     al,cl
  81.         rep     movsb
  82.         ret
  83. GetCommand endp        
  84.  
  85. CaptureFilename proc near
  86.         mov     ax,cs
  87.         mov     ds,ax
  88.         mov     es,ax
  89.         mov     si,offset inputstring
  90.         mov     di,offset filename
  91.         xor     bl,bl
  92. Nospace:
  93.         lodsb
  94.         cmp     al,'~'
  95.         je      capdone
  96.         cmp     al,' '
  97.         je      nospace
  98.         stosb 
  99.         inc     bl
  100.         cmp     bl,8
  101.         jb      nospace
  102. Capdone:
  103.         mov     al,'.'
  104.         stosb
  105.         mov     al,'t'
  106.         stosb
  107.         mov     al,'g'
  108.         stosb
  109.         mov     al,'a'
  110.         stosb
  111.         mov     al,0
  112.         stosb
  113.         mov     al,'$'
  114.         stosb
  115.         mov     di,offset palname
  116.         mov     si,offset filename
  117.         mov     cx,14
  118.         rep     movsb
  119.         mov     di,offset palname+1     ;+1 to get past dot
  120.         xor     bh,bh
  121.         add     di,bx                   ;bx = 0 thru 7
  122.         mov     al,'p'
  123.         stosb
  124.         mov     al,'a'
  125.         stosb
  126.         mov     al,'l'
  127.         stosb
  128.         ret
  129. CaptureFileName endp
  130.  
  131. ;THIS STUFF SETS UP THE PALETTE FOR USE OF TGA TYPE PALETTES        
  132.  
  133. palettesetup proc near
  134.         mov     dx,offset bufferit
  135.         mov     di,dx
  136.         mov     si,dx
  137.         mov     cx,768
  138.         cld
  139. DIVIDE: 
  140.         lodsb                           ; this routine divides by four
  141.         shr     al,1
  142.         shr     al,1
  143.         stosb
  144.         dec     cx
  145.         jne     divide
  146.  
  147.         mov     cx,256                  ; no of registers to xchange
  148.         mov     di,dx   
  149.         mov     si,dx                   ; point di to red
  150.         inc     si                      ; and si to blue
  151.         inc     si                      
  152. switchrb:                               ; switches red and blue registers
  153.         mov     al,[di]
  154.         mov     ah,[si]
  155.         mov     [si],al
  156.         mov     [di],ah
  157.         add     di,3
  158.         add     si,3
  159.         dec     cx
  160.         jne     switchrb
  161.         ret
  162.  
  163. palettesetup endp
  164.  
  165.  
  166. ;============================
  167. Main:
  168.         ;call    getcommand
  169.         cmp     [inputlength],0
  170.         jne     gotsome
  171.         jmp     noinput
  172. Gotsome:
  173.         mov     ax,cs
  174.         mov     es,ax
  175.         mov     ds,ax
  176.         call    capturefilename
  177.  
  178. openfiles:
  179.         mov     dx,offset filename      ;load in palette
  180.         sub     al,al                   
  181.         mov     ah,3dh                  
  182.         int     21h                     
  183.         jc      abort                   
  184.         mov     bx,ax                   
  185.  
  186.         sub     cx,cx                   ;18 past beginning
  187.         mov     dx,18                
  188.         mov     ax,4200h             
  189.         int     21h                  
  190.  
  191.         mov     cx,768                  ;read 768 bytes
  192.         mov     dx,offset bufferit    
  193.         mov     ah,3fh               
  194.         int     21h                  
  195.         
  196.         mov     ah,3eh                  ;close source file 
  197.         int     21h                     
  198.  
  199.         call palettesetup
  200.         
  201.         mov     dx,offset palname 
  202.         sub     cx,cx             
  203.         mov     ah,3ch                  
  204.         int     21h                     
  205.         jc      abort                   
  206.         mov     bx,ax          
  207.         
  208.         mov     cx,768                  ; the dest file
  209.         mov     ah,40h                  ; load function write
  210.         mov     dx,offset bufferit      ;
  211.         int     21h                     ; write it
  212.  
  213.         cmp     ax,cx
  214.         je      success
  215.         mov     ah,9                    ; disk full error
  216.         mov     dx,offset diskfull      ;
  217.         int     21h                     ; 
  218. success:
  219.         mov     ah,3eh                  ;close source file 
  220.         int     21h                     
  221.         mov     ah,9
  222.         mov     dx,offset result
  223.         int     21h
  224.         jmp     endit
  225. abort:
  226.         push    ax
  227.         mov     ah,3eh
  228.         int     21h
  229.         pop     ax
  230.         cmp     ax,6
  231.         jb      displayerror
  232.         jmp     noinput
  233. Displayerror:
  234.         mov     bx,ax
  235.         shl     bx,1
  236.         mov     dx,errorlook[bx]
  237.         mov     ah,9                    ; Print string
  238.         int     21h                     ; 
  239.         mov     ah,9
  240.         mov     dx,offset errormes
  241.         int     21h
  242.         
  243. endit:
  244.         mov     ax,4c00h                ; return control to 
  245.         int     21h                     ; DOS and exit
  246.  
  247. Noinput:
  248.         mov     ax,cs
  249.         mov     ds,ax
  250.         mov     es,ax
  251.         mov     ah,9
  252.         mov     dx,offset properuse
  253.         int     21h
  254.         mov     ax,4c00h
  255.         int     21h
  256.  
  257. code    ends
  258.         end     start
  259.